7060 IF SH(VA) THEN FOR Q = 1 TO 13:SH(Q) = SH(Q) *(SH(Q) = >SH(VA)): NEXT
7070 SH(VA) = CP:S = 0
7080 IF TS = 15 OR TS = 31 THEN S = 2: GOSUB 8500
7090 IF CP = 1 THEN 7130
7100 IF CP = 2 THEN GOSUB 7200: GOSUB 8500: GOTO 7130
7110 IF CP = 3 THEN GOSUB 7220: GOSUB 8500: GOSUB 7300: GOTO 7130
7120 GOSUB 7240
7130 IF CP = 8 AND TS < >31 THEN P$ = "LAST CARD":S = 1: GOSUB 8500: GOTO 9300
7140 IF CP = 8 THEN 9300
7150 IF TS = 31 THEN 8370
7160 PL = 1 -PL: RETURN
7199 REM PAIR?
7200 IF P(CP) = P(CP -1) THEN S = 2:P$ = "PAIR"
7210 RETURN
7219 REM PAIR ROYAL?
7220 GOSUB 7200: IF S AND P(CP -2) = P(CP) THEN S = 6:P$ = P$ +" ROYAL"
7230 RETURN
7239 REM DOUBLE PAIR ROYAL?
7240 GOSUB 7220: IF S = 6 AND P(CP) = P(CP -3) THEN S = 12:P$ = "DOUBLE " +P$
7250 GOSUB 8500
7299 REM RUN?
7300 J1 = 1:J2 = 13: FOR Q = P(CP) TO 1 STEP -1: IF NOT SH(Q) THEN J1 = Q +1:Q = 0
7310 NEXT : FOR Q = P(CP) TO 13: IF NOT SH(Q) THEN J2 = Q -1:Q = 13
7320 NEXT :T = J2 -J1 +1: FOR Q = CP TO 1 STEP -1: IF P(Q) <J1 OR P(Q) >J2 OR Q < >SH(P(Q)) THEN T = CP -Q:Q = 0
7330 NEXT : IF T <3 THEN RETURN
7340 J3 = 0: FOR Q = J1 TO J2: IF SH(Q) <CP -J2 +J1 THEN J3 = Q:Q = J2
7350 NEXT : IF NOT J3 THEN T = J2 -J1 +1: GOTO 7390
7360 IF J3 -J1 >2 THEN J2 = J3 -1: GOTO 7340
7370 IF J2 -J3 >2 THEN J1 = J3 +1: GOTO 7340
7380 RETURN
7390 P$ = "RUN OF " + STR$(T):S = T: IF NOT PG THEN GOSUB 8500
7400 RETURN
8299 REM A PLAYER SAYS 'GO'
8300 P$ = "GO": ON GO +1 GOTO 8320,8360
8310 IF NOT PL THEN GO = 0: GOTO 30
8320 IF NOT NC THEN ON GO +1 GOTO 8350,8360
8330 FOR T = 2 TO 5:VA = C(1,0,T):VA = VA -(VA -10) *(VA >10):VA = VA *(VA >0): IF TS +VA <32 AND VA < >0 THEN T = 6: NEXT :P$ = "YOU CAN STILL PLAY A CARD!": GOTO 30
8700 PRINT "<CTRL-0x04>PR#0": TEXT : HOME : VTAB 1: HTAB 8: PRINT "COMMANDS ALWAYS IN EFFECT": PRINT : PRINT " S - TOGGLE SOUND ON AND OFF.": PRINT " W - TOGGLE WATCHING OF HAND SCORING.": PRINT " D - SET THE MESSAGE DISPLAY DELAY."
8710 PRINT "<-- - MOVE THE HIGHLIGHT BOX LEFT.": PRINT "--> - MOVE THE HIGHLIGHT BOX RIGHT.": PRINT "ESC - QUIT THE GAME.": PRINT
8720 HTAB 9: PRINT "COMMANDS FOR LAYING-AWAY": PRINT : PRINT "SPC - INVERTS THE HIGHLIGHTED CARD.": PRINT " L - LAYS-AWAY THE TWO INVERTED CARDS."
8730 PRINT : HTAB 11: PRINT "COMMANDS FOR PLAYING": PRINT : PRINT " P - PLAY THE HIGHLIGHTED CARD.": PRINT " G - TELL OPPONENT TO 'GO'.": PRINT "RET - ALTERNATE 'GO' KEY."
8770 P$ = "DELAY IS NOW " + STR$(DD) +". ENTER NEW DELAY (0-9):": GOSUB 40: GOSUB 8990: IF KP <48 OR KP >57 THEN 8770
8780 DD = KP -48:P$ = "DELAY IS NOW " + STR$(DD): GOTO 30
8789 REM TOGGLE WATCHING OF HAND SCORING
8790 WS = 1 -WS:P$ = "YOU WILL ONLY SEE THE HAND TOTAL SCORE.": IF WS THEN P$ = "YOU WILL NOW SEE THE HANDS BEING SCORED."
8800 GOTO 30
8809 REM TOGGLE SOUND ON AND OFF
8810 SO = PEEK(SNAP):SO = 1 -SO: POKE SNAP,SO:SU$(0) = "N.": IF NOT SO THEN SU$(0) = "FF."
8820 P$ = "SOUND IS NOW O" +SU$(0): GOTO 30
8839 REM SPREAD THE CARDS OUT BELOW THE BOARD AND LET PLAYERS CUT FOR DEAL. N$ RETURNS "YOU" FOR PLAYER DEALER, "I" FOR COMPUTER DEALER
8840 X = 245:Y = 80: GOSUB 20: FOR I = 0 TO 20: NEXT : POKE SN,0:Y = 128: FOR I = 0 TO 17:X = I *14 +5: GOSUB 24: NEXT :V = 24:P$ = "CUT FOR DEAL. HIT A KEY TO PICK A CARD.": GOSUB 40
8850 FOR I = 0 TO 51: XDRAW 7 AT I *5,177:P = PEEK(49152): FOR J = 0 TO 12: NEXT : XDRAW 7 AT I *5,177:I = I -51 *(I = 51):I = I +52 *(P >127): NEXT : POKE SN,SO:VA = PEEK(DECK +I -53)
8870 FOR I = 0 TO 51: XDRAW 7 AT I *5,177:P = P +1: FOR J = 0 TO 12: NEXT : XDRAW 7 AT I *5,177:I = I -51 *(I = 51):I = I +52 *(T = P): NEXT : IF I = K THEN I = I +1
8880 VA = PEEK(DECK +I -53): GOSUB 8940:X = 5 *(I -53):Y = 128: GOSUB 23:P = SV -VA: IF NOT P THEN SV = SS *100 +SV:VA = SU *100 +VA
8890 N$ = "YOU": IF VA <SV THEN N$ = "I"
8900 P$ = N$ +" DEAL FIRST.": POKE 49168,0: IF P THEN VA = 1: GOTO 30
8919 REM CLEAR THE TWO AREAS WHERE CARDS ARE DISPLAYED
8920 FOR I = 245 TO 0 STEP -24:X = I:Y = 32: GOSUB 20: NEXT : FOR I = 245 TO 0 STEP -24:X = I:Y = 128: GOSUB 20: NEXT : RETURN
8939 REM INTERPRET A VALUE GRABBED FROM THE ML DECK
8940 FOR WD = 3 TO 0 STEP -1: IF VA >WD *64 THEN SU = WD +1:VA = VA -WD *64:WD = 0
8950 NEXT : RETURN
8959 REM DRAW THE BOARD
8960 CALL BOARD: HCOLOR= 7: HPLOT 0,80 TO 239,80 TO 239,126 TO 0,126 TO 0,80: HCOLOR= 4: FOR I = 240 TO 244: HPLOT I,80 TO I,126: NEXT : FOR I = 40 TO 239 STEP 40: HPLOT I,81 TO I,125: NEXT : HPLOT 2,98 TO 237,98: HPLOT 2,108 TO 237,108: GOSUB 8970: GOTO 8980
8969 REM DRAW THE SCORING HOLES
8970 SP = 49200 *SO: FOR I = 4 TO 240 STEP 8: DRAW 7 AT I,85:J = PEEK(SP): DRAW 7 AT I,93:J = PEEK(SP): DRAW 7 AT I,113:J = PEEK(SP): DRAW 7 AT I,121:J = PEEK(SP): NEXT : RETURN
8979 REM DRAW THE GAME HOLES
8980 FOR I = 0 TO 9: DRAW 7 AT I *8 +4,103:J = PEEK(SP): DRAW 7 AT 236 -8 *I,103:J = PEEK(SP): NEXT : RETURN
8989 REM GET A KEYPRESS. RETURNS ASCII VALUE IN P. UPPER CASE IS CONVERTED TO LOWER CASE
8990 FOR KP = 0 TO 127:KP = PEEK(49152): NEXT : POKE 49168,0:KP = KP -129:KP = KP -32 *(KP >96):KP = KP +9 *(KP <0): IF KP < >27 OR PE THEN PE = 0: RETURN
8991 P$ = "DO YOU WANT TO QUIT? (Y OR N)":PE = 1:V = 24: GOSUB 6400: IF NOT AN THEN PE = 0:QT = 0: RETURN
8993 PE = 0: IF P(0) THEN P$ = "DON'T YOU WANT TO FINISH THIS HAND?": VTAB 24: HTAB 3: PRINT P$: GET QK$: ON QK$ = "N" GOTO 15030: ON QK$ = "n" GOTO 15030:QT = 1: VTAB 24: HTAB 1: PRINT SPC( 40);: RETURN
8994 GOTO 15000
8998 REM THE BEGINNING OF THE PROGRAM
8999 REM SET HI-RES 1, FULL SCREEN. DO ALL THE DIMS
9020 GOSUB 8960:X = 245:Y = 80: GOSUB 24: FOR I = 0 TO 12: READ SH(I): NEXT : FOR I = 0 TO 12:X = 9 +I *19:Y = 32:VA = I +1:SU = SH(I): GOSUB 23: NEXT : DATA 4,3,1,2,4,3,1,2,4,3,1,2,4
9029 REM PUT "CRIBBAGE" AND SIGNATURE ON SCREEN
9030 CALL TITLE: VTAB 1: HTAB 1: PRINT "Cards & program by": HCOLOR= 7: DRAW 2 AT 140,7: DRAW 2 AT 141,7: DRAW 3 AT 205,7: DRAW 3 AT 206,7: VTAB 3: PRINT CHR$(96);"?' for help"
9049 REM READ DATA & GET PLAYER NAME
9050 V = 24: GOSUB 30000: GOTO 12000
9056 IF TS THEN TS = 0: GOTO 9065
9060 GOSUB 8840
9065 DL = (N$ = "I")
9069 REM SHUFFLE AND DEAL
9070 GOSUB 8920:X = 245:Y = 80: GOSUB 22: FOR I = 0 TO 5:VA = PEEK(DECK +2 *I): GOSUB 8940:C(1 -DL,0,I) = VA:C(1 -DL,1,I) = SU:VA = PEEK(DECK +2 *I +1): GOSUB 8940:C(DL,0,I) = VA:C(DL,1,I) = SU: NEXT
9080 FOR I = 0 TO 5:M = 99: FOR J = I TO 5: IF C(1,0,J) <M THEN M = C(1,0,J):K = J
9090 NEXT :J = C(1,0,K):C(1,0,K) = C(1,0,I):C(1,0,I) = J:J = C(1,1,K):C(1,1,K) = C(1,1,I):C(1,1,I) = J: NEXT
9100 FOR I = 0 TO 5:X = 3 +40 *I: FOR J = 0 TO 1:Y = 32 +96 *((DL +J) = 1): IF Y = 128 THEN VA = C(1,0,I):SU = C(1,1,I): GOSUB 23: GOTO 9120
9110 GOSUB 24
9120 NEXT : NEXT :X = 245: GOSUB 21:CY = Y:DL = 1 -DL:PL = DL:P(0) = 1
9129 REM LET PTG LAY-OFF HIS CARDS
9130 GOSUB 550:C$ = CHR$(8) + CHR$(21) +"SWD?/ L": POKE 49168,0: FOR I = 0 TO 5:SH(I) = 0: NEXT :HO = 0
9139 REM LET PLAYER LAY-OFF HIS CARDS
9140 GOSUB 8990:K = KP: FOR P = 1 TO LEN(C$): IF K = ASC( MID$ (C$,P,1)) THEN K = P:P = 99
9150 NEXT : ON K GOSUB 8670,8670,8810,8790,8770,8700,8700,8640,8580: GOTO 9140
9159 REM GET STARTER
9160 VA = PEEK(DECK +12): GOSUB 8940:SV = VA:SS = SU:X = 245:Y = 80: GOSUB 23: FOR I = 1 TO 13:SH(I) = 0: NEXT : IF VA = 11 THEN P$ = "TWO FOR HIS HEELS":S = 2: GOSUB 8500
10075 X = (S%(PL,0) -1) *8 +4:X = (240 -X) *(PL = 1) +X *(PL = 0): XDRAW 7 AT X,Y:X = X +8 *((PL = 1) -(PL = 0)): IF X >3 AND X <237 THEN XDRAW 7 AT X,Y